This is document contains examples on analysis and visualisations on output from the RHEA agent-based-model for the “Digging into Data” project. Each example is presented with accompanying R code as well as further documentation on the functions used to create the visualization or analysis. The examples require data provided in the accompanying ../../data/ directory. Further details on the data sets and the data items/variables are provided at the end of the document.
RHEA is the acronym for Risks and Hedonics in an Empirical Agent-Based Land-Market. The model simulates a bilateral, heterogeneous housing market in an empirical landscape. Buyers search for properties in a seaside town where both coastal amenities and environmental risks of flooding are spatially correlated. A realtor agent serves as a mediating agent that learns about the current market trend and willingness to pay for various spatial attributes of properties (Filatova, 2014). At each time step, sellers of the properties advertise their ask prices while buyers select and offer bids on properties. Then, the two groups engage in dyadic (pair-wise) negotiation which may or may not result in a successful transaction (or trade).
The ask prices are primarily market-driven: sellers (1) consult with a realtor on the appropriate price given the current trends as estimated by a hedonic analysis of the recent simulated transactions and (2) adjust the ask price if a property remains too long on a market. Buyers bid on the single property that brings them maximum utility and is affordable for their budgets. A buyer’s budget constraints include their income, preference for amenities, a necessity to pay insurance premiums for flood-prone properties, and the possibility to activate an annual income growth. Spatial patterns of price dynamics and intensity of trade are the emergent outputs of the model. When studying them under various parameter settings, we noticed that relative market power of buyers and sellers plays a role. The explanation is twofold. Firstly, a parcel that is very attractive will most likely receive several bid offers, out of which its seller chooses the highest, driving prices for most desirable properties up. Secondly, sellers of the properties that are less desirable may receive only one or even no bid offers, which can result in their accepting a bid that is below their ask prices or reducing their ask prices after a number of unsuccessful trades. Thus, excess demand drives prices up while excess supply pushed them down.
The RHEA output data sets employed in the following examples are encoded as flat data.frames in R. The columns need to include (in no particular order) the run seed (or incrementing id number is sufficient), time step or tick, experimental variables/conditions, and outcome variables. For example, the following table shows the first three and several other rows of the data employed in the first example (i.e., the data frame x.bs.200):
## Loading required package: knitr
| Ins | RH | s | t | avPriceFP0 | avPriceFP100 | avPriceFP500 | avPriceCoastFront | … |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 239169.97 | 266217.58 | 193210.70 | 461214.67 | … |
| 0 | 0 | 0 | 1 | 239578.40 | 266698.20 | 193525.24 | 462776.09 | … |
| 0 | 0 | 0 | 2 | 240034.15 | 267186.23 | 193877.64 | 463939.95 | … |
| … | … | … | … | … | … | … | … | … |
| 1 | 0 | 2 | 199 | 525784.50 | 516614.00 | 470629.55 | 905632.60 | … |
| 1 | 0 | 2 | 200 | 528258.68 | 518983.84 | 472518.26 | 910007.72 | … |
| 1 | 0 | 3 | 0 | 239169.97 | 266217.58 | 193210.70 | 461214.67 | … |
| 1 | 0 | 3 | 1 | 239559.08 | 266593.64 | 193442.31 | 462448.64 | … |
| … | … | … | … | … | … | … | … | … |
In this data, the 1st two columns contain the experimental values (in RH and Ins) and the next two columns contain the random number seed and the time step (in s and t respectively). The subsequent columns contain the model outcomes.
User-defined data sets to be used with the visualization and analysis routines need to follow this tabular format.
Details of all of the data sets and data items/variables are provided at the end of the document.
All of the functions in the examples require prior loading of the primary script file (ut_did.R) in the R session using the following command:
source("../../src/lib/ut_did.R")
One may consider ut_did.R to be a library of functions which contain the plotting functions of the examples below as well as auxiliary functions.
Also, all functions have an outfile parameter. If outfile is set, then the plotting function will write its output to a PDF file specified by outfile. Users may also set width and height (in inches), the defaults of which are both 7 if not already specified by the function, to adjust the x- and y- dimensions of the PDF plot as they see fit. It is advisable to include the .pdf file extension in the outfile filename, e.g., outfile="figure_1.pdf".
The function producing regression models will write its output in text (not PDF). It is advisable to include the .txt file extension in the outfile filename for regression model outpts, e.g., outfile="table_1.txt".
In the RHEA model, we can track the number of buyers and sellers at each time period (or tick) to reveal those seeds/runs that deviate from the nominal behavior. The goal of this diagnostic visual analysis is to ascertain the characteristics of those simulation instances in which the population counts of either agent type pool deviates from a nominal distribution.
One needs first load in the dataset employed and run the plotting function for charting two variables across 25 seeds/runs over time horizon of 200 ticks, highlighting those trajectories that surpass a defined threshold. The following lines should be run in the R session to produce the figure below:
if (!exists("x.bs.200")) x.bs.200 = read.csv("../../data/x_bs_200.csv")
fig.nB.did(data=x.bs.200)
The light pink trails indicate the seller count per tick, which appears to increase at a slight rate. The gray trails indicate most of the buyer counts, which initially decrease and reach a steady state. The multi-colored trails that climb indicate distinct runs/seeds which incur buyer counts exceeding the nominal threshold of 1300. The graph reveals that for some seeds, the buyer counts climb high after which it quickly collapses to a nominal level. This observation tells us that the curvilinear mean Buyer/Seller difference (for coef = 0.70) suffers from these “mountain” outlier influences. The seller counts on the otherhand appear wholly stable and monotonically increasing and does not contribute to the curvilinear mean. Furthermore, we observe a small spike into both buyer and seller counts near the start of the simulation.
The graph reveals that for some seeds, the buyer counts climb high after which it quickly collapses to a nominal level. This observation tells us that the curvilinear mean Buyer/Seller difference (for coef = 0.70) suffers from these “mountain” outlier influences. The seller counts on the otherhand appear wholly stable and monotonically increasing and does not contribute to the curvilinear mean. Furthermore, we observe a small spike into both buyer and seller counts near the start of the simulation.
fig.nB.didThe fig.nB.did plotting function has the following arguments which may be employed to generalize its functionalities. As a general function, it can plot trajectories of two outcomes for individual runs and also graphically highlight those values which exceed a threshold.
| Argument | Default | Description |
|---|---|---|
| data | x.bs.200 | Dataset containing variables in yvar |
| yvar | c(“nB”,“nS”) | Two outcome variables of data to plot |
| S | 0:24 | Values/range of the seeds to consider |
| svar | “s” | Variable with the seeds |
| tvar | “t” | Variable with time step values |
| yM | 30 | Vertical dashed line denoting mortgage years (assumes each tick is semi-annual) |
| crit | 1300 | Critical value of yvar[1], above which trajectories are highlighted by different colors |
| sd.mult | 0 | If sd.mult = 0, then use crit directly. If sd.mult > 0, then crit = \(\mu + \sigma \cdot\)sd.mult (of yvar[1]). If sd.mult = -1, then crit = max(yvar[2]) |
| xlab | “Ticks” | Label of x-axis |
| ylab | “Buyers/Sellers” | Label of y-axis |
| y0 | 500 | Minimum of y-axis values displayed |
In order to understand these “mountains”, we display the Buyer (black) and Seller (red) counts for each run/seed in separate plots. These graphs have a common y-axis range to allow for comparison. The green dots highlight sequences in which the buyer counts increase for at least 5 consecutive ticks. The following lines should be run in the R session to produce the figure below:
if (!exists("x.bs.200")) x.bs.200 = read.csv("../../data/x_bs_200.csv")
fig.nBS.did(cex=.75,abs=T)
We observe that the larger spikes consist of multiple rising (green) sequences. The next figure displays the same data but using the y-axis range of each seed’s data. Note that the y-axis values which appear on the leftmost graphs pertain only to their immediate graphs. The following lines should be run in the R session to produce the figure below:
if (!exists("x.bs.200")) x.bs.200 = read.csv("../../data/x_bs_200.csv")
fig.nBS.did(cex=.75,abs=F,lwd=.5)
We observe that the “mountains” entail multiple sequences of increasing buyer counts suggesting that such sequences are required to sustain the growth of these counts. We also observe less concentrated rising sequences and almost all runs contain these.
fig.nBS.didThe fig.nBS.did plotting function has the following arguments which may be employed to generalize its functionalities. The function produces a set of plots containing two variables over time with each plot representing results from a distinct seed.
| Argument | Default | Description |
|---|---|---|
| data | x.bs.200 | Dataset containing variables in yvar |
| S | 0:24 | Value(s)/range of seeds to display |
| yvar | c(“nB”,“nS”) | Two variables in data to plot |
| svar | “s” | Variable with the seeds |
| tvar | “t” | Variable with time step values |
| scale | 1000 | Dividing factor for yvar (for purposes of displaying shorter numerical labels) |
| abs | TRUE | Is the y-axis scale fixed and absolute across all plots? |
For one of the seeds that produce a saturation/crash pattern, we plot the trajectory of several outcomes across a 2D space over a time horizon of 200 ticks. The following lines should be run in the R session to produce the figures below:
if (!exists("x.yM.10.200")) x.yM.10.200 = read.csv("../../data/x_yM_10_200.csv")
fig.yM.traj.did(data = x.yM.10.200, x = "nT", y = "nB", s = 1, fx = I,
fy = I, xlab = "Number of Trades", ylab = "Number of Buyers")
fig.yM.traj.did(data = x.yM.10.200, x = "avPriceCoastFront", y = "nB",
s = 1, fx = I, fy = I, xlab = "Average Price Coastal Front", ylab = "Numbers of Buyers")
fig.yM.traj.did(data = x.yM.10.200, x = "t", y = "avPriceCoastFront", s = 1,
fx = I, fy = I, xlab = "Ticks", ylab = "Average Price of Coastal Front")
The first one charts the number of buyers and number of trades; the second one, the number buyers against the average coastal property price; and the third, the average coastal property price against time (ticks). In each plot, the colors denote time: dark blue is the beginning of the simulation while dark red represents the end of the simulation.
The crash on the market occurs because many buyers leave without finding an affordable house. Over time, prices, which sellers gradually adjust if they are not able to sell, drop to the level when buyers may at least attempt to purchase a house by bidding on it. Yet, at this moment the market is already so saturated with buyers, that this excess demand creates a tremendous competition among them. As a result, many buyers leave since they face several unsuccessful trade attempts. At the same time, prices start to grow since sellers select the highest bid out of many bids that are now being submitted.
fig.yM.traj.didThe fig.yM.traj.did plotting function has the following arguments which may be employed to generalize its functionalities. As a generic function, it plots the trajectory of model behavior in a 2D space defined two of the outcomes.
| Argument | Default | Description |
|---|---|---|
| data | x.yM.10.200 | Dataset containing variables x and y |
| x | “nT” | Variable for x-axis (default = number of trades) |
| y | “nB” | Variable for y-axis (default = number of buyers) |
| s | 1 | Single seed value from data to plot (assuming data contains outcomes from multiple seeds) |
| fx | I | Transformation function for x variable (default = indicator function) |
| fy | I | Transformation function for y variable (default = indicator function) |
| xlab | “Number of Trades” | Label for x-axis |
| ylab | “Number of Buyers” | Label for y-axis |
In next figure, we display the buyer counts under a new depreciation mechanism in which is applied cumulatively and an increase in the proprotion of properties on sale (fraction on sale or fos= 0.20). The following lines should be run in the R session to produce the figure below:
if (!exists("x.yM2.200")) x.yM2.200 = read.csv("../../data/x_yM2_200.csv")
fig.yM2.did(data=x.yM2.200,lwd=.25)
The columns in the figure indicate each of the mortgage years, yM \(\in\) {10,20,30,40} and the rows indicate each combination of the three conditions: realtor hedonic (0=static), insurance, and income growth. For example, the first row is (0,0,0) (static, no insurance, and no income growth). The second row is (0,0,1) (same but with income growth). The final row is (1,1,1) which equates to engagement of all three adaptive, insurance, and income growth. For presentation purposes, the axes labels have been removed.
The alternative depreciation mechanism appears to mitigate the buyer spikes especially for the longer mortgage periods. However, we see that the spikes are even more prevalent when the mortgage period is curtailed (yM = 10), which reduces the purchasing power of the buyers. In the absence of adaptive price assessment (static hedonic) and income growth (rows 000 and 010), the proportionally fewer and fewer buyers are able to afford properties so the influx of new buyers creates a monotonically increasing trend in the buyer counts.
fig.yM2.didThe fig.yM2.did plotting function has the following arguments which may be employed to generalize its functionalities. The function implicitly seeks all combinations of the 1st three variables (enumerated in the plotted rows) against a fourth variables (enumerated in the plotted columns). These four variables are specified in zvar. In each plot, the outcomes of yvar are shown for all seeds in S.
| Argument | Default | Description |
|---|---|---|
| data | x.yM2.200 | Dataset containing variables of yvar and zvar |
| S | 0:24 | Range or vector of seeds to plot |
| mfrow | c(8,4) | Dimensional arrangement of subplots |
| yvar | c(“nB”,“nS”) | Two variables of data to plot |
| svar | “s” | Variable with seeds |
| zvar | c(“RH”,“Ins”,“G”,“yM”) | Vector specifying the experimental conditions/variables |
| RH | 0:1 | 1st condition values/range (default: realtor hedonics) |
| Ins | 0:1 | 2nd condition values/range (default: insurance) |
| G | 0:1 | 3rd condition values/range (default: income growth) |
| YM | c(10,20,30,40) | 4th condition values/range (default: mortgage years) |
In the next figure, we examine the effects of adjusting the new buyer coefficient which guides the rate at which new buyers enter the market. The new buyer coefficient (default of 0.70) to have a range of values \(\in\) {0.60,0.65,0.70,0.75,0.80}. The colors follow a spectrum from dark blue for the lowest values to dark red for the highest. Each coefficient is applied to each of the four conditions arising from the realto hedonic and insurance binary conditions. The order of display for overlapping points have been randomized so as to allow better viewing of these points and accompanying lines. The following lines should be run in the R session to produce the figure below:
if (!exists("x.bs.coef.200")) x.bs.coef.200 = read.csv("../../data/x_bs_coef_200.csv")
fig.coef.did(data = x.bs.coef.200, Y = "dBS", off.div = 0.75, ylab = "Buyers - Sellers",
rel = F, ylim = c(-500, 620))
The main observed effect is the new buyers coefficient having a positive impact on the difference between buyers and sellers. This is clearly expected as the coefficient directly determines the influx of new buyers at each time step. However, we also observe a curvilinear trend in those conditions in which the realtor hedonics are Adaptive (or +A). These non-monotonic trends are invariably linked to the buyer count spikes and crashes observed in the previous examples. Moreover, in general, the adaptive hedonics condition appears to consistently result in lower buyer/seller difference (within each buyer coefficient setting), the spikes notwithstanding. The inference from this observation is that the adaptive condition eventually results in fewer buyers remaining in the market.
fig.coef.didThe fig.coef.did plotting function has the following arguments which may be employed to generalize its functionalities. As a general function, it shows separate lines for three conditions as defined by yvar. Note that the x-axis values are divided by 2 to reflect the semi-annual frequency of each tick.
| Argument | Default | Description |
|---|---|---|
| data | x.bs.coef.200 | Dataset containing variables of yvar |
| Y | “avPriceCoastFront” | Variable for y-axis |
| yvar | c(“RH”,“Ins”,“nBC”) | Variables of the experimental conditions |
| RH | 0:1 | 1st variables’ values/range (default for realtor hedonics) |
| Ins | 0:1 | 2nd variables’ values/range (default for insurance) |
| nbcs | c(0.60,0.65,0.70,0.75,0.80) | 3rd variables’ values/range (default for new buyer coefficient) |
| len | 15 | Number of points to plot on top of lines |
| ylab | “% @ Time 1” | Label for y-axis |
| xlab | “Year” | Label for x-axis |
| ylim | c(100,300) | Plotting limits for the y-axis |
| legend | c(“-A -I”,“-A +I”,“+A -I”,“+A +I”) | Legend labels for all combinations of first two conditions |
| off.div | 0.75 | Offset divisor for x-axis position to prevent overlapping points |
| rel | TRUE | Are outcomes are relative to first value of Y (as a percentage)? |
Depreciation on a property’s price occurs when the seller cannot sell for a given duration. We examine the effects of three methods of operationalizing depreciation: 1) depreciation is performed on the current property price (dm = 0), 2) the depreciation cumulatively appreciates (dm = 1) for multiple sale failures and is applied to the market-based asking price, 3) depreciation is performed on the market-based asking price and resets in the next transaction, if any, and is non-cumulative (dm = 2). We regard the cumulative depreciation (dm = 1) to be the more correct application of depreciation.
In the following figures, we specifically examine the effects of the depreciation methods on the hedonic regression coefficients. Naturally, we employ the adaptive realtor hedonic condition for these results. Each of the coefficients across time steps have been scaled by the initial value and so they represent relative changes. Each (relative) coefficient set (vector) at each time period has a Euclidean distance to each of the vectors from the other time periods. These distances appear in a \(m \times m\) distance matrix (where \(m = \text{time steps} = 60\)); in this example, we consider 60 time steps (or 30 years reflecting the default mortgage period). Each cell (\(i\),\(j\)) in this matrix refers to the Euclidean distance between the relative coefficents of tick \(i\) and those of \(j\).
The distance matrix occupies an \(m\)-dimensional space which be dimensionally-reduced using dimension reduction methods. Here, we employ classical multidimensional scaling (MDS aka principal coordinate analysis) which in employs an eigen-decomposition of the distance matrix. An MDS’ result to similar to PCA (principal component analysis); in fact, the unscaled PCA coordinates are identical to MDS. Here, we reduce the \(m\)-dimensional set of coefficient vectors to 2-dimensions for visualization purposes.
The following figures contain MDS’s resulting from the evolution of the hedonic regression from each of the depreciation methods (for three seeds) in order to evaluate both the model’s behavior in the context of the hedonic price mechanism. The following lines should be run in the R session to produce the figures below:
if (!exists("x.deprec.60")) x.deprec.60 = read.csv("../../data/x_deprec_60.csv")
fig.deprec.rdist.did(data=x.deprec.60,mode="rmd")
or
if (!exists("x.deprec.60")) x.deprec.60 = read.csv("../../data/x_deprec_60.csv")
for (dm in 0:2) {
for (seed in c(1,2,4)) {
plot.deprec.rdist(data=x.deprec.60,dm=dm,s=seed,cex=.5,cex.axis=.5,lab.line=-1)
}
}
The number within the plot as well as the coloring denote the time steps (dark blue to dark red). The \(x\) and \(y\) axes denote coordinates in the reduced space and are unitless, hence, no axes labels are shown. The interpretation of the space delineated by the axes is that pairs of points (i.e., vectors of relative coefficients) that far apart in the plot are also far apart according to their Euclidean distances.
The size of the space of each plot can be measured by the range of the axes. In the case of the dm = 0, the trajectories of the coefficient vectors (for seeds 1 and 4) span a much larger space indicating wider variation in their relative values and the instability of the hedonic pricing mechanism under this depreciation mode. The remaining depreciation modes occupy similarly sized spaces, but dm = 1 (the “correct” mode) appears to incur a slightly larger space. Furthermore, the trajectories of dm = 1 and 2 are also roughly unidirectional along one of the dimensions while the two salient trajectories of dm = 1 incur switchbacks (i.e., bi-directionality along with dimensions).
fig.deprec.rdist.didThe fig.deprec.rdist.did plotting function has the following arguments which may be employed to generalize its functionalities. As a general function, it can display an MDS of distances between outcome set (over time) from values of a single experimental variable over selected seeds.
| Argument | Default | Description |
|---|---|---|
| data | x.deprec.60 | Data containing outcomes |
| D | 0:2 | Experimental conditions (default: depreciation modes) |
| S | c(1,2,4) | Selected seeds to visualize |
| ignore | c(1,2,3,26-0:4) | Column ids of variables in the data to ignore in distance matrix calculation |
| mode | “rel” | Transformation of the outcomes used in the MDS (default: relative to values at time = 0; alternative: “scale” for standardization) |
| scalingfn | “cmdscale” | Name of MDS scaling function (default: classical MDS, alternatives are “isoMDS” and “monoMDS” which require the MASS and vegan libraries respectively) |
We examine the extent of linear predictability of a key outcome, the average price of coastal front property avPriceCoastFront, through three binary, parametric conditions: adaptive/static realtor hedonic, A; presence of insurance in the utility calculation, I; and engagement of buyer’s income growth, G.
We report separate models for three mortgage years parameters (yM \(\in\) {10,20,30}) and two settings for the parameter that sets the initial fraction of properties on sale (fos \(\in\) {0.14,0.20} where the former has been the default for earlier RHEA runs and analysis). We output the table of regression models as plain text as well as laid out as a HTML/PDF table in R markdown (using the kable() function). The following lines should be run in the R session to produce the regression results table:
if (!exists("x.fos.dm1.200")) x.fos.dm1.200 = read.csv("../../data/x_fos_dm1_200.csv")
z = l.lm.yM2.fos.did(data=x.fos.dm1.200,do.res=F,lr=3,r=0,mode=0,YM=c(10,20,30),ret=T,print=T)
Predictor yM=10 yM=10 yM=20 yM=20 yM=30 yM=30
fos=0.14 fos=0.20 fos=0.14 fos=0.20 fos=0.14 fos=0.20
Intercept 420*** 420*** 450*** 460*** 403*** 395***
(4) (4) (9) (6) (16) (16)
I(nsurance) -103*** -105*** 165*** 146*** 436*** 481***
(4) (4) (10) (7) (18) (19)
A(daptive) 17** 21*** 13 6 70** 81**
(6) (6) (13) (9) (24) (25)
G(rowth) 47*** 55*** 36*** 22*** 147*** 166***
(4) (4) (10) (7) (18) (19)
IxA -37*** -39*** -61*** -30** -153*** -181***
(7) (8) (17) (11) (31) (32)
IxG -35*** -41*** -26 -11 -142*** -161***
(7) (8) (17) (11) (31) (32)
IxAxG 73*** 63*** 47* 42** 275*** 289***
(8) (9) (20) (13) (36) (37)
Adj-R^2 0.883 0.887 0.707 0.833 0.870 0.878
n 200 200 200 200 200 200
kable(z,align=c('l',rep(c('r','l'),6)))
| Predictor | yM=10 | yM=10 | yM=20 | yM=20 | yM=30 | yM=30 | ||||||
| fos=0.14 | fos=0.20 | fos=0.14 | fos=0.20 | fos=0.14 | fos=0.20 | |||||||
| Intercept | 420 | *** | 420 | *** | 450 | *** | 460 | *** | 403 | *** | 395 | *** |
| (4) | (4) | (9) | (6) | (16) | (16) | |||||||
| I(nsurance) | -103 | *** | -105 | *** | 165 | *** | 146 | *** | 436 | *** | 481 | *** |
| (4) | (4) | (10) | (7) | (18) | (19) | |||||||
| A(daptive) | 17 | ** | 21 | *** | 13 | 6 | 70 | ** | 81 | ** | ||
| (6) | (6) | (13) | (9) | (24) | (25) | |||||||
| G(rowth) | 47 | *** | 55 | *** | 36 | *** | 22 | *** | 147 | *** | 166 | *** |
| (4) | (4) | (10) | (7) | (18) | (19) | |||||||
| IxA | -37 | *** | -39 | *** | -61 | *** | -30 | ** | -153 | *** | -181 | *** |
| (7) | (8) | (17) | (11) | (31) | (32) | |||||||
| IxG | -35 | *** | -41 | *** | -26 | -11 | -142 | *** | -161 | *** | ||
| (7) | (8) | (17) | (11) | (31) | (32) | |||||||
| IxAxG | 73 | *** | 63 | *** | 47 | * | 42 | ** | 275 | *** | 289 | *** |
| (8) | (9) | (20) | (13) | (36) | (37) | |||||||
| Adj-R^2 | 0.883 | 0.887 | 0.707 | 0.833 | 0.870 | 0.878 | ||||||
| n | 200 | 200 | 200 | 200 | 200 | 200 |
The above regression model predicts the dependent variable at time step = 60. The overall impact of yM is lower absolute coefficients for the lower yM (i.e., for both positive and negative coefficient values) despite comparable base prices (i.e., Intercept). However, the trend is not monotonic: some coefficients for yM = 20 can reside in between those of yM = 10 and 30. And, we also see a lowering of the main effect for insurance even negative for yM = 10. Also, fos heightens the impact of all the conditions (hedonics, insurance, and income growth) for yM \(\in\) {10,30} but not for 20.
l.lm.yM2.fos.didThe l.lm.yM2.fos.did reporting function has the following arguments which may be employed to generalize its functionalities. As a general function, it reports separate linear regression models for a single dependent variable obtained across combinations of two conditions (here, yM and fos) predicted by user-defined modelive model of three parametric predictors (here labeled, A, I, and G). The parametric predictors reside in variables named RH, Ins, and G and do not necessarily have to be binary.
| Argument | Default | Description |
|---|---|---|
| data | x.fos.dm1.200 | Data containing predictors and dependent variable |
| y | “avPriceCoastFront” | Dependent variable for regression models |
| T | 60 | Time value(s)/range for the regression data |
| scale | 1000 | Scaling value for dependent variable (for presentation purposes) |
| fn | I | Transformation function on scaled dependent variable (default: indicator function) |
| yvar | c(“yM”,“fos”) | Variables names for the first two primary conditions |
| YM | c(10,20,30) | 1st condition values/range |
| FOS | c(0.14,0.20) | 2nd condition values/range |
| form | “RH+Ins+G+Ins:RH+Ins:G+Ins:RH:G” | Predictive formula for regression model |
| xlab | c(“Intercept”,“I(nsurance)”,“A(daptive)”, “G(rowth)”,“IxA”,“IxG”,“IxAxG”) | Labels for predictors in the output table |
| yvar.fmt | c(“%d”,“%.2f”) | sprintf() format strings for yvar values’ appearance in the output table |
| ret | FALSE | Return the final table (w/o aligned cells) |
| TRUE | Print the plain text of the table (w/alignment spacing) |
The following table provides basic summaries of each of the data sets (in order of appearance).
| Name | Description |
|---|---|
| x_bs_200.csv | Experiments over insurance and hedonic parameters; contains average prices for property types, buyer/seller stats; 25 seeds per condition; 200 ticks (100 years) |
| x_yM_10_200.csv | Data borne from insurance disengaged but adaptive realtor hedonics engaged; 200 ticks |
| x_yM2_200.csv | Experiments over insurance, hedonics, income growth, and mortgage years; 25 seeds per condition; 200 ticks (100 years) |
| x_bs_coef_200.csv | Similar to x_bs_200.csv but also varying new buyer coefficient from 0.6 to 0.8 in steps of 0.05; 25 seeds per condition; 200 ticks (100 years) |
| x_deprec_60.csv | Regression coefficients with adaptive realtor hedonics engaged for four seeds with varying depreciation mode (dm); 60 ticks |
| x_fos_dm1_200.csv | Examines outcomes’ dependencies to the fraction_on_sale parameter of 0.14 and 0.20 over mortgage years (yM) of 10, 20, and 30 and depreciation mode (dm) of 1; 200 ticks |
This table contains descriptions of all of the variables in the data sets employed in this vignette, with the exception of the data set for Example 3 (i.e., x.deprec.60); the description of the variables in that data set appears afterwards. A single table is presented for many of the variables span multiple data sets.
| Variable | Data Type | Description |
|---|---|---|
| Parameter, Seed, and Time Variables: | ||
| Ins | integer (binary) | Insurance |
| RH | integer (binary) | Adaptive hedonics |
| G | integer (binary) | Income growth |
| yM | integer | Mortgage years |
| nBC | real | New buyers coefficient |
| s | integer | Random number generator seed |
| t | integer | Time step (aka tick) |
| Outcome Variables: | ||
| avPriceFP0 | real | Avg price of non-flood risk properties |
| avPriceFP100 | real | Avg price of properties with 1/100 risk |
| avPriceFP500 | real | Avg price of properties with 1/500 risk |
| avPriceCoastFront | real | Avg price of coastal properties |
| avPriceNowFP0 | real | Avg price of non-flood risk properties (just traded) |
| avPriceNowFP100 | real | Avg price of properties with 1/100 risk (just traded) |
| avPriceNowFP500 | real | Avg price of properties with 1/500 risk (just traded) |
| avPriceNowCF | real | Avg price of coastal properties (just traded) |
| nTradedNowFP0 | integer | # of traded properties that are non-flood risk |
| nTradedNowFP100 | integer | # of just traded properties that are 1/100 risk |
| nTradedNowFP500 | integer | # of just traded properties that are 1/500 risk |
| nTradedNowCF | integer | # of just traded properties that are coastal |
| nT | integer | # of parcels just traded |
| nB | integer | Current # of buyers |
| nS | integer | Current # of sellers |
| nNC | integer | # of newcomers |
| nOS | integer | # of old sellers |
| nOB | integer | # of old buyers |
| nBL | integer | # of buyers who left |
| dBS | integer | Difference between # of buyers and sellers |
| nD | integer | Difference between # of buyers and sellers |
The following table provides details about the data set employed in Example 3 (x.deprec.60). These data are primarily regression coefficients inferred in the hedonic model. These coefficients will evolve only for the ‘adaptive’ realtor hedonic condition.
| Variable | Data Type | Description |
|---|---|---|
| Parameter, Seed, and Time Variables: | ||
| d | integer | Depreciation Mode |
| s | integer | Random number generator seed |
| time | integer | Time step or tick |
| Regression Coefficients: | ||
| intercept | real | Intercept |
| bathrooms | real | Number of bathrooms |
| bathrooms.2 | real | (Number of bathrooms)2 |
| age | real | Age of the house on the property |
| age.2 | real | Age2 |
| SQFT | real | Square footage of the house |
| SQFT.2 | real | SQFT2 |
| lotsize | real | Size of the property |
| lotsize.2 | real | lotsize2 |
| newhome | real | Is the house new? |
| postFirm | real | Is the property post-FIRM (Flood Insurance Rate Map) |
| FP100 | real | Is the parcel at 1/100 flood risk? |
| FP500 | real | Is the property at 1/500 flood risk? |
| coastalFront | real | Is the property coastal front? |
| log.distAmen. | real | log(Distance to beach) |
| log.distCBD. | real | log(Distance to center of business) |
| log.distHwy. | real | log(Distance to nearest highway) |
| log.distPark. | real | log(Distance to nearest park) |